home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
mint
/
editors
/
mjovesrc.zoo
/
setmaps.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-04
|
4KB
|
184 lines
/***************************************************************************
* This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
* is provided to you without charge, and with no warranty. You may give *
* away copies of JOVE, including sources, provided that this notice is *
* included in all the files. *
***************************************************************************/
#define TXT_TO_C 1 /* must be a number for MAC compiler */
#include <stdio.h>
#include "funcdefs.c"
#ifdef MAC
#include "vars.c"
#endif
private int
matchcmd(choices, what)
register const struct cmd choices[];
register char *what;
{
register int i;
for (i = 0; choices[i].Name != NULL; i++) {
if (what[0] == choices[i].Name[0]
&& strcmp(what, choices[i].Name) == 0)
return i;
}
return -1;
}
#ifdef MAC
matchvar(choices, what)
register struct variable choices[];
register char *what;
{
register int len;
int i;
len = strlen(what);
for (i = 0; choices[i].Name != NULL; i++) {
if (what[0] == choices[i].Name[0]
&& strcmp(what, choices[i].Name) == 0)
return i;
}
return -1;
}
#endif
static int
StartsWith(s, pre)
const char *s, *pre;
{
return strncmp(s, pre, strlen(pre)-1) == 0;
}
private char *
PPchar(c)
int c;
{
static char str[16];
char *cp = str;
if (c & 0200) {
c &= ~0200;
strcpy(cp, "M-");
cp += 2;
}
if (c == '\033')
strcpy(cp, "ESC");
else if (c < ' ')
(void) sprintf(cp, "C-%c", c + '@');
else if (c == '\177')
strcpy(cp, "^?");
else
(void) sprintf(cp, "%c", c);
return str;
}
private void
extract(into, from)
char *into,
*from;
{
from += 2; /* Past tab and first double quote. */
while ((*into = *from++) != '"')
into += 1;
*into = '\0';
}
void
#ifdef MAC
_main() /* for Mac, so we can use redirection */
#else
main()
#endif
{
FILE *ifile,
*of;
char line[100],
comname[70];
int comnum,
ch = 0,
savech = -1,
errors = 0;
#ifdef MAC
char *which;
bool inmenu = NO;
#endif
ifile = stdin;
of = stdout;
if (ifile == NULL || of == NULL) {
printf("Cannot read input or write output.\n");
exit(1);
}
while (fgets(line, sizeof line, ifile) != NULL) {
if (StartsWith(line, "#if")) {
savech = ch;
fprintf(of, line);
continue;
} else if (StartsWith(line, "#else")) {
if (savech == -1)
fprintf(stderr, "WARNING: ifdef/endif mismatch!\n");
else
ch = savech;
fprintf(of, line);
continue;
} else if (StartsWith(line, "#endif")) {
savech = -1;
fprintf(of, line);
continue;
#ifdef MAC
} else if (StartsWith(line, "#MENU")) {
inmenu = YES;
continue;
#endif
} else if (!StartsWith(line, "\t\"")) {
/* If unrecognized, pass and prepare to start new table */
fprintf(of, line);
ch = 0;
continue;
}
extract(comname, line);
if (strcmp(comname, "unbound") == 0) {
comnum = -1;
} else {
comnum = matchcmd(commands, comname);
#ifdef MAC
which = "commands";
if (comnum < 0 && inmenu) {
comnum = matchvar(variables, comname);
which = "variables";
}
#endif
if (comnum < 0) {
fprintf(stderr, "Warning: cannot find \"%s\".\n", comname);
errors += 1;
}
}
#ifdef MAC
if (inmenu) {
if (comnum < 0)
fprintf(of, "\t(data_obj *) NULL,\n");
else
fprintf(of, "\t(data_obj *) &%s[%d],\n",which, comnum);
} else /*...*/
#endif
{
if (comnum < 0)
fprintf(of, "\t(data_obj *) NULL,\t\t/* %s */\n", PPchar(ch));
else
fprintf(of, "\t(data_obj *) &commands[%d],\t/* %s */\n", comnum, PPchar(ch));
ch += 1;
}
}
fclose(of);
fclose(ifile);
exit(errors);
}